# 导入自动化模块
from DrissionPage import ChromiumPage
# 导入一个格式化输出模块
from pprint import pprint
# 导入csv
import csv
# 导入time模块用于等待
import time
# 导入pandas用于Excel操作
import pandas as pd

# 创建CSV文件对象
f = open('bossdata_Java_测试.csv', mode='w', encoding='utf-8', newline='')
csv_writer = csv.DictWriter(f, fieldnames=[
    '职位',
    '城市',
    '区域',
    '街道',
    '公司名',
    '薪资',
    '学历',
    '领域',
    '融资情况',
    '规模',
    '技能要求',
    '福利'
])
# 写入表头
csv_writer.writeheader()

# 创建Excel文件对象
excel_data = []

try:
    # 自动打开浏览器
    dp = ChromiumPage()
    # 监听数据包
    dp.listen.start('wapi/zpgeek/search/joblist.json')
    # 访问网站
    dp.get('https://www.zhipin.com/web/geek/job?query=%E6%B5%8B%E8%AF%95%2Fjava&city=101200100')
    # 循环翻页
    for page in range(1, 11):
        print(f'正在采集第{page}页的内容')
        # 下滑页面到底部
        dp.scroll.to_bottom()
        # 等待数据包加载
        resp = dp.listen.wait()
        # 获取响应数据
        json_data = resp.response.body
        # 提取职位信息
        jobList = json_data['zpData']['jobList']
        for i in jobList:
            print(i)
            # 提取相关数据，保存字典
            dit = {
                '职位': i['jobName'],
                '城市': i['cityName'],
                '区域': i['areaDistrict'],
                '街道': i['businessDistrict'],
                '公司名': i['brandName'],
                '薪资': i['salaryDesc'],
                '学历': i['jobDegree'],
                '领域': i['brandIndustry'],
                '融资情况': i['brandStageName'],
                '规模': i['brandScaleName'],
                '技能要求': ' '.join(i['skills']),
                '福利': ' '.join(i['welfareList'])
            }
            # 写入CSV数据
            csv_writer.writerow(dit)
            # 添加到Excel数据列表
            excel_data.append(dit)
            print(dit)

        # 点击下一页，添加异常处理
        try:
            dp.ele('css:.ui-icon-arrow-right').click()
        except Exception as e:
            print(f"找不到下一页按钮，等待3秒后跳过: {e}")
            time.sleep(3)

finally:
    # 确保文件在任何情况下都会关闭
    f.close()
    # 将数据写入Excel文件
    try:
        df = pd.DataFrame(excel_data)
        excel_file_path = 'bossdata_Java_测试.xlsx'
        df.to_excel(excel_file_path, index=False)
        print(f"Excel文件已成功生成: {excel_file_path}")
    except Exception as e:
        print(f"生成Excel文件时发生错误: {e}")